﻿/**********************************************************************************************************************************/
// Vê o Extra 1.0
// Biblioteca principal.js
// Data: 01/10/2010
// Autor: Vinícius Faria - Mídia 3
// Email: vinicius.faria@midia3.com.br
// Descrição: Contém todas as funcionalidades do app.
/**********************************************************************************************************************************/


/**********************************************************************************************************************************/
// QA TÉCNICO (Em Processo)
// Histórias:
// - Escolher meus canais
// - Acompanhar meus canais
// - Alterar meus canais
// - Filtrar meus canais
/**********************************************************************************************************************************/


// Variáveis globais
var canaisOwner; // Canais do Owner
var canaisOwnerCarregados = false; // Canais do Owner
var nomeOwner = ""; //Nome do Owner
var canaisCarregados = false; // Verifica se os canais já foram carregados uma vez para não precisar carregá-los de novo.
var urlExtra = "http://extra.globo.com/";
var numLimiteRSS = 4; // Número limite de noticias exibidas (começando do 0).
var flagDesenv = false;
var urlInstallApp = "http://prod.sandbox.orkut.com/Main#AppInfo?appId=1080152861907&bpc=1";


/**********************************************************************************************************************************/
// Instancia a function carregaFeeds
//      canaisGravados -> json de canais do dono.
//      numFeeds -> quantidade de feeds a ser carregado.
//      callback -> function executada após o consumo dos feeeds
/**********************************************************************************************************************************/
$.extend({
    carregaFeeds: function(canaisGravados, numFeeds, callback) {
        var arrFeeds = [];
        var arrCanaisTodos = [];
        var contador = 1;

        $("#comboCanais").html("<option value='todos'>Todos</option>");

        $.each(canaisGravados.id, function(a) {
            $.each(canais, function(b) {
                $.each(canais[b].subcanais, function(c) {
                    if (canais[b].subcanais[c].id == canaisGravados.id[a]) {
                        // Monta a select/combo dinamicamente de acordo com os canais do usuario
                        var descCanal = canais[b].nome + ' > ' + canais[b].subcanais[c].nome;
                        $('#comboCanais').append('<option value="' + canais[b].subcanais[c].id + '">' + descCanal + '</option>');

                        // Redefinindo valor da var para adequar layout
                        descCanal = canais[b].nome + ' <span>&nbsp;&nbsp;</span> ' + canais[b].subcanais[c].nome;

                        // Monta um coleção de canais que tenha "Tudo sobre..." assinado.
                        if (canais[b].subcanais[c].id.indexOf("td_") > -1) {
                            arrCanaisTodos.push(canais[b].id);
                        }

                        // Plugin do google usado para consumir os RSS/Feeds
                        $.jGFeed(canais[b].subcanais[c].rss, function(feeds) {
                            // Verifica se ocorreu algum erro
                            if (!feeds)
                                return false;

                            // Monta o obj com todos os feeds
                            for (var i = 0; i < feeds.entries.length; i++) {
                                var entry = feeds.entries[i];
                                arrFeeds.push({ idCanal: canais[b].id,
                                    idSubcanal: canais[b].subcanais[c].id,
                                    descCanal: descCanal,
                                    linkCanal: feeds.link,
                                    feed: entry
                                });
                            }

                            // Verifica se todos os feeds de todos os canais já foram carregados e chama o callback
                            if (arrFeeds.length / numFeeds == canaisGravados.id.length) {
                                if (typeof callback == 'function') {
                                    callback.call(this, arrFeeds, arrCanaisTodos);
                                }
                            }

                        }, numFeeds);

                    }
                });
            });
        });
    }
});


/**********************************************************************************************************************************/
// Inicializa o aplicativo
/**********************************************************************************************************************************/
function init() {
    escondePages(); // Esconde todas as paginas.

    // Caso não seja o dono, redireciona para a pagina de instalação do app.
    if (!viewerIsOwner()) {
        window.top.location.replace(urlInstallApp);
        return;
    }
    
    redirectIndicarApp(); //define evento click do link para a tela de Indicar Aplicativo.
    gravaCanais(); // Evento do botão adicionar/alterar canais
    replaceArroba();
	
	// Busca o canais do dono do aplicativo
	buscaCanaisOwner({"hadError":function(){return false;}});
}

function escondePages() {
    gerenciaCanais();
    $("#acompanhar_canais").hide();
    $("#indicar_app").hide();
    $("#enviar_noticia").hide();
}

function buscaCanaisOwner(data) {
	if (data.hadError()) {
	    alert("Erro: " + data.getErrorMessage());
	} 
	
	buscaDados({"user":"OWNER", 
				"groupId":"SELF", 
				"dados":["CANAIS"], 
				"retorno":"data",
				"params":{}
	},processaCanaisOwner);
}

function processaCanaisOwner(resp) {
    var dataResp = resp.get('data');
    var owner = resp.get("people_0").getData();

    if (!dataResp.hadError()) {
        var data = dataResp.getData();
        var ownerId = gadgets.util.getUrlParameters()["gadgetOwner"];

        if (owner.getById(ownerId) == null) {
            alert("Erro ao buscar os dados do Orkut. Tente novamente.");
            return false;
        }

        //Saudação Dinamica com o nome do dono
        nomeOwner = owner.getById(ownerId).getDisplayName();
        $("#nomeDono").text(nomeOwner);

        var ownerData = data[ownerId];

        if (ownerData != undefined) {
            if (ownerData["CANAIS"] != undefined) { // Se os canais já estão escolhidos.
                var canaisGravados = gadgets.json.parse(gadgets.util.unescapeString(ownerData["CANAIS"]));
                canaisOwner = canaisGravados;
                canaisOwnerCarregados = true;

                carregaAlteraCanais(canaisGravados); // definindo evento click que carregará a tela de alteração
                lerMaisHome(); // define click do link ler mais no site do extra.
                
                // Printa Feeds
                $.carregaFeeds(canaisGravados, 5, function(arrFeeds, arrCanaisTodos) {
                    var strHTML = '';

                    if (arrFeeds.length > 0) {
                        // Ordena todos os feeds por Data
                        arrFeeds.sort(OrdenarPorData);
                        // Limpa noticias
                        $(".lista-noticias").html(strHTML);
                    }

                    for (var i = 0; i < arrFeeds.length; i++) {
                        var item = arrFeeds[i];
                        var data = formataData(item.feed.publishedDate);

                        strHTML = '';
                        strHTML +=
	                        '<li name="' + item.idSubcanal + '" class="canal-' + item.idCanal + '">' +
	                            '<h2>' + item.descCanal + '</h2>' +
	                            '<p><a href="' + item.feed.link + '" class="txt_data" target="_blank">' + data + '</a></p>' +
	                            '<h3><a href="' + item.feed.link + '" target="_blank">' + item.feed.title + '</a></h3>' +
	                            '<p><a href="' + item.feed.link + '" class="txt_noticia" target="_blank">' + item.feed.contentSnippet + '</a></p>' +
	                            '<ul class="lista-itens-noticias">' +
	                                '<li><a href="' + item.feed.link + '" target="_blank" class="ler-mais">Ler Mais<span><img src="http://ve-o-extra.googlecode.com/svn/branches/B1/gadget/images/ext-ler-mais.gif"></span></a></li>' +
	                                '<li><a href="#" class="envie-amigos">Enviar Notícia para meus amigos</a></li>' +
	                                '<li><a href="#containerDiv" name="modal" class="comentar">Comentar</a></li>' +
	                                '<li><a href="#" class="twittar">twittar</a></li>' +
	                            '</ul>' +
	                            '<input type="hidden" value="' + item.linkCanal + '" />' +
	                        '</li>';

                        $(".lista-noticias").append(strHTML);

                        // Filtra os RSSs para eliminar duplicidade caso tenha "Tudo sobre..." assinando.
                        $.each(arrCanaisTodos, function(a) {
                            if (arrCanaisTodos[a] == item.idCanal) {
                                if (item.idSubcanal.indexOf("td_") == -1)
                                    $(".lista-noticias li[name=" + item.idSubcanal + "]").hide();
                            }
                        });
                    }

                    $("#btnRedirectIndicarApp").show();
                    $("#spanRedirectIndicarApp").hide();

                    exibePage("acompanhar_canais");
                    limitaExibicaoRSS(); // Limita em 5 a exibição de noticias
                    ajustaAltura("acompanhar_canais");
                    filtraCanais(); // Define evento da select/combo de filtro de canais.
                    redirectEnviaNoticia(); // Definindo evento click do link indicar notícia para um amigo.

                    boxComentaNoticia();
                });
            }
        } else { // Se não existe data no usuário
            verificaFlagDesenv(); // Controla a exibição de funcionalidades em desenvolvimento
            canaisOwner = {};
            listaCanais();
        }

        //TODO: Loader;

    } else {
        alert("Erro ao buscar os dados do usuário dono.");
    }
}

function carregaAlteraCanais(canaisGravados) {
    $("#btnAlterarCanais").click(function() {
        exibePage("alterar");
        
        $("#ckbSelecionarCanais").removeAttr("checked");

        $.each(canaisGravados.id, function(a) {
            $("#" + this).attr("checked", "true");
        });

        if ($(".tipo-canais input[type=checkbox]:checked").length == $(".tipo-canais input[type=checkbox]").length) {
            $("#adicionar-alterar_canais").checkCheckboxes();
        }

        $(".tipo-canais ul").each(function() {
            var chs = $("#" + this.id + " input[type=checkbox]").get();

            if (chs[0].checked) {
                for (var i = 0; i < chs.length; i++) {
                    if (i != 0)
                        $(chs[i]).attr("disabled", true);
                }
            }
        });
    });
}

function OrdenarPorData(objA, objB) {
    var dataA = new Date(objA.feed.publishedDate);
    var dataB = new Date(objB.feed.publishedDate);

    return ((dataA == dataB) ? 0 : ((dataA < dataB) ? 1 : -1));
}

function formataData(strData) {
    var dataFormatada;

    try {
        var data = new Date(strData);
        var dataTraduzida = $.datepicker.formatDate('dd/mm/yy', data);

        // Formatando hora e minuto para dois algarismos
        var hr = ((h = data.getHours().toString()) && h.length == 1) ? "0" + h : h;
        var min = ((m = data.getMinutes().toString()) && m.length == 1) ? "0" + m : m;

        dataFormatada = dataTraduzida + ', às ' + hr + ':' + min + 'h';
    }
    catch (err) {
        dataFormatada = strData;
    }

    return dataFormatada;    
}

function listaCanais() {
	if (!viewerIsOwner()) { 
		if(canaisOwner.id!=undefined) {
			alert("Você não pode escolher os canais do seu amigo.");
			return;
		} else {
		    alert("Seu amigo ainda não escolheu os canais.");
		}
	}

	if (!canaisCarregados) {
	    exibePage("adicionar");
		canaisCarregados = true;
    }
}

// Monta e define os eventos da tela de adicionar/alterar canais
function gerenciaCanais(str) {
    var div = $("#adicionar-alterar_canais");

    $("#saudacao").hide();

    if (str == null) {
        verificaFlagDesenv();
        div.hide();
        return;
    }

    var btnAcompanharCanais = div.find("#btnAcompanharCanais");
    var h2 = div.find("h2");
    var btnGravarCanais = div.find("#btnGravarCanais");

    if (str == "adicionar") {
        $("#btnRedirectIndicarApp").hide();
        $("#saudacao").show();
        btnAcompanharCanais.hide();
        h2.text("Adicione os canais que deseja acompanhar:");
        btnGravarCanais.attr("class", "btn-adicionar-canais");
        btnGravarCanais.text("Adicionar Canais");
    }

    if (str == "alterar") {
        $("#btnRedirectIndicarApp").show();
        $("#spanRedirectIndicarApp").hide();
        btnAcompanharCanais.show();
        h2.text("Altere os canais que deseja acompanhar:");
        btnGravarCanais.attr("class", "btn-alterar-canais");
        btnGravarCanais.text("Alterar Canais");
    }

    carregaCanais(); //Monta html com os canais disponiveis para acompanhar
    gerenciaTodosChecks(); // Eventos dos checkboxes de adicionar/alterar canais
    verificaFlagDesenv();
    div.show();
}

function carregaCanais() {
    var strHTML = '';
    var divColunaEsq = '<div class="canais-esquerdo">';
    var divColunaDir = '<div class="canais-direito">';

    $.each(canais, function(i) {
        strHTML = '';
        strHTML +=
            '<fieldset>' +
                '<legend class="' + canais[i].id + '"><span>' + canais[i].nome + '</span></legend>' +
                '<ul id="canais_' + canais[i].id + '">';

        $.each(canais[i].subcanais, function(p) {
            strHTML +=
                    '<li>';
            
            if (canais[i].subcanais[p].rss == "") {
                strHTML +=
                        '<input type="checkbox" disabled id="' + canais[i].subcanais[p].id + '" value="' + canais[i].subcanais[p].rss + '" />' +
                        '<label class="lbldisabled" for="' + canais[i].subcanais[p].id + '">' + canais[i].subcanais[p].nome + ' (em breve)</label>';
            }
            else {
                strHTML +=
                        '<input type="checkbox" id="' + canais[i].subcanais[p].id + '" value="' + canais[i].subcanais[p].rss + '" />' +
                        '<label for="' + canais[i].subcanais[p].id + '">' + canais[i].subcanais[p].nome + '</label>';
            }

            strHTML +=
                    '</li>';
        });

        strHTML +=
                '</ul>' +
            '</fieldset>';

        if (canais[i].divColuna == "esq")
            divColunaEsq += strHTML;
        else if (canais[i].divColuna == "dir")
            divColunaDir += strHTML;
    });

    divColunaEsq += '</div>';
    divColunaDir += '</div>';

    $(".tipo-canais").html(divColunaEsq + divColunaDir);
}

function gerenciaTodosChecks() {
    $("#ckbSelecionarCanais").change(function() {
        var chk = this;

        $(".tipo-canais ul").each(function() {
            gerenciaCheckBoxesCanais(chk, this);
        });
    });

    $(".tipo-canais ul").each(function() {
        var box = this;
        var chs = $(box).find("input[type=checkbox]").get();

        $(chs[0]).change(function() {
            gerenciaCheckBoxesCanais(this, box);
        });
    });
}

function gerenciaCheckBoxesCanais(chk, box) {
    if (chk.checked) {
        $(box).checkCheckboxes(":not(input[type=checkbox][value=''])");

        $(box).find("input[type=checkbox][value!='']").each(function(i) {
            if (i != 0)
                $(this).attr("disabled", true);
        });
    } else {
        $(box).unCheckCheckboxes(":not(input[type=checkbox][value=''])");

        $(box).find("input[type=checkbox][value!='']").each(function(i) {
            if (i != 0)
                $(this).removeAttr("disabled");
        });

        $("#ckbSelecionarCanais").removeAttr("checked");
    }
}

function gravaCanais() {
    $("#btnGravarCanais").click(function() {
        var canaisSelecionados = { id: [] };

        if (viewerIsOwner()) { // se viewer for = Owner, permite escolher os canais.
            if ($(".tipo-canais input[type=checkbox]:checked").length > 0) {
                $(".tipo-canais input[type=checkbox]:checked").each(function() {
                    canaisSelecionados.id.push(this.id);
                });

                var json = gadgets.json.stringify(canaisSelecionados);

                // Grava os dados na base persistente do orkut.
                escreveDados(["CANAIS"], [json], buscaCanaisOwner);

                if ($("#btnGravarCanais").text() == "Adicionar Canais") {
                    var title = " ";
                    var body = "instalou o aplicativo Vê o Extra e agora está por dentro de tudo que acontece.";

                    postUpdate(title, body);
                }
            }
            else
                alert('Você deve selecionar pelo menos um canal.');
        }
        else { // Se viewer != owner, não permite escolha dos canais
            alert("Você; não pode escolher os canais do seu amigo.");
        }
    });
}

function filtraCanais() {
    $("#comboCanais").change(function() {
        var valor = $(this).val();

        if (valor != "todos") {
            $(".lista-noticias li[class^=canal-]").each(function() {
                if ($(this).attr("name") == valor) {
                    $(this).show();
                    lerMaisHome($(this).find("input[type='hidden']").val());
                }
                else {
                    $(this).hide();
                }
            });
        }
        else {
            var arrCanaisTodos = [];

            lerMaisHome();

            $("#comboCanais").find("option[value^='td_']").each(function() {
                var canalTodos = $(this).val().replace("td_", "");
                arrCanaisTodos.push(canalTodos);
            });

            $(".lista-noticias li[class^=canal-]").each(function() {
                var name = $(this).attr("name");
                var classe = $(this).attr("class");

                $(this).show();

                $.each(arrCanaisTodos, function(a) {
                    if (classe == "canal-" + arrCanaisTodos[a]) {
                        if (name.indexOf("td_") == -1)
                            $(".lista-noticias li[name=" + name + "]").hide();
                    }
                });
            });
        }

        limitaExibicaoRSS(); // Limita em 5 a exibição de noticias
    });
}

function lerMaisHome(link) {
    if (link == null || link == '')
        link = urlExtra;
    
    $("#btnLerMaisHome").attr("href", link);
}

function limitaExibicaoRSS() {
    $(".lista-noticias li[class^=canal-]:visible").each(function(i) {
        $(this).removeClass("ultimalinha");
        if (i > numLimiteRSS)
            $(this).hide();
    });

    $(".lista-noticias li[class^=canal-]:visible:last").addClass("ultimalinha");
}

function redirectIndicarApp() {
    $("#btnRedirectIndicarApp").click(function() {
        reiniciarIndicacao("app");
        gerenciaSelectAmigosApp();
        exibePage("indicar_app");
        $("#btnRedirectIndicarApp").hide();
        $("#spanRedirectIndicarApp").show();
    });
}

function redirectEnviaNoticia() {
	// Ao clicar no link, todo o bloco de html da noticia a ser enviada é clonada para a div de noticia de indicar app.
    $(".lista-noticias a[class=envie-amigos]").each(function() {
        $(this).click(function() {
            reiniciarIndicacao("noticia");
            
            var div = $("#enviar_noticia .noticia-envio").find("div");
            var li = $(this).parents("li[class^=canal-]").clone();
            
			$(li).find("ul").remove();
			$(li).find("input[type=hidden]").remove();
            $(div).attr("class", $(li).attr("class"));
			$(div).html($(li).html());
            gerenciaSelectAmigosNoticia();
            exibePage("enviar_noticia");
        });
    });
}

function voltarAcompanharNoticia() {
    if (canaisOwnerCarregados) {
        $("#btnRedirectIndicarApp").show();
        $("#spanRedirectIndicarApp").hide();
        exibePage("acompanhar_canais");
    }
    else {
        exibePage("adicionar");
    }
}

function reiniciarIndicacao(indicacao) {
    var idDiv;
    var btn;
    var divMais;
    
    if (indicacao == "app") {
        idDiv = "#indicar_" + indicacao;
        btn = "#btnIndicar";
        divMais = "#indicarMais";
    }
    else {
        idDiv = "#enviar_" + indicacao;
        btn = "#btnEnviar";
        divMais = "#enviarMais";
    }

    $(idDiv).each(function() {
        $("#boxMeusAmigos_" + indicacao).unCheckCheckboxes();
        $("#meusAmigosSelecionados_" + indicacao).find("ul").html('');

        if ($(".msg-sucesso").show()) {
            $(".msg-sucesso").hide();
            $("#boxAmigosSelecionados_" + indicacao).addClass("amigos-selecionados");
        }

        $("#boxMeusAmigos_" + indicacao).show();
        $(divMais).hide();
        $(btn).show();
    });
}

/**********************************************************************************************************************************/
// QA TÉCNICO (Aguardando Liberação)
// Histórias:
// - Indicar aplicativo
/**********************************************************************************************************************************/

// function para verificar flag de desenvolvimento, isso esconde/mostra funcionalidades em desenv
function verificaFlagDesenv() {
    if (!flagDesenv) {
        $("#btnRedirectIndicarApp").hide();
        $("#spanRedirectIndicarApp").hide();

        $("ul[class='lista-itens-noticias']").find("li").each(function() {
            if ($(this).find("a").attr("class") != "ler-mais")
                $(this).hide();
        });
    }
}

// Busca todos os amigos do dono
function gerenciaSelectAmigosApp() {
    buscaDados([
        {
            "user": "OWNER",
            "groupId": "FRIENDS",
            "params": { "filter": "all", "sortOrder": "name", "profiledetails": ["PROFILE_URL"] },
            "dados": "",
            "retorno": ""
        },
        {
            "user": "OWNER",
            "groupId": "FRIENDS",
            "params": { "filter": "hasApp", "sortOrder": "name", "profiledetails": ["PROFILE_URL"] },
            "dados": "",
            "retorno": ""
        }
    ]
	, processaAmigosApp);
}

function processaAmigosApp(resp) {
    var friendsAll = resp.get("people_0").getData();
    var friendsApp = resp.get("people_1").getData();
    var friendsSemApp = [];
    var semApp;

    friendsAll.each(function (personAll) {
        semApp = true;

        if (personAll.getId()) {
            friendsApp.each(function (personApp) {
                if (personAll.getId() == personApp.getId()) {
                    semApp = false;
                    return true;
                }
            });

            if (semApp)
                friendsSemApp.push({ "ID": personAll.getId(), "Nome": personAll.getDisplayName(), "Thumb": personAll.getField(opensocial.Person.Field.THUMBNAIL_URL) });
        }
    });

	montaHtmlAmigos(friendsSemApp, "meusAmigos_app");
	selecionaTodosAmigos("app");
	gerenciaCheckBoxesAmigos("app");

    indica('app',' indicou o Vê o Extra para seu(s) amigo(s) ');
    indicaMais("app");
}

function OrdenarPorNome(objA, objB) {
    return ((objA.Nome.toLowerCase() == objB.Nome.toLowerCase()) ? 0 : ((objA.Nome.toLowerCase() > objB.Nome.toLowerCase()) ? 1 : -1));
}

// Define os eventos dos checks
function gerenciaCheckBoxesAmigos(indicacao) {
    $("#meusAmigos_" + indicacao).find("li").each(function () {
        var li = this;

        $(li).find("input[type='checkbox']").each(function () {
            var chk = this;

            $(chk).change(function () {
                if (this.checked) { // selecionado um amigo e passando para o boxes de amigos selecionados
                    $("#meusAmigosSelecionados_" + indicacao).find("ul").append($(li).clone());
                    ordenaAmigosSelecionados(indicacao);
                }
                else { // verificando os dados para remover o amigo da seleção
                    $("#meusAmigosSelecionados_" + indicacao).find("li").each(function () {
                        if ($(this).attr("name") == $(li).attr("name")) {
                            $(this).remove();
                            $("#selecionarTodos_" + indicacao).removeAttr("checked");
                            return true;
                        }
                    });
                }
            });
        });
    });
}

//Ordena os amigos selecionados por ordem alfabetica e define eventos dos checks do boxes de amigos selecionados
function ordenaAmigosSelecionados(indicacao) {
    var amigosSelecionados = [];

    // monta o array com os dados dos amigos para reordenar.
    $("#meusAmigosSelecionados_" + indicacao).find("li").each(function () {
        var id = $(this).attr("name");
        var thumb = $(this).find("img").attr("src");
        var nome = $(this).find("p").text();

        amigosSelecionados.push({ "ID": id, "Nome": nome, "Thumb": thumb });
    });

    // Monta o html (li) dos amigos já reordenado.
    montaHtmlAmigos(amigosSelecionados, "meusAmigosSelecionados_" + indicacao);
    $("#meusAmigosSelecionados_" + indicacao).checkCheckboxes();

    carregaAmigosSelecionados(indicacao);
}

function carregaAmigosSelecionados(indicacao) {
    $("#meusAmigosSelecionados_" + indicacao).find("li").each(function() {
        var li = this;

        // define evento dos checks dos amigos selecionados
        $(li).find("input[type='checkbox']").each(function() {
            var chk = this;

            $(chk).change(function() {
                if (!this.checked) {
                    $("#meusAmigos_" + indicacao).find("li").each(function() {
                        if ($(this).attr("name") == $(li).attr("name"))
                            $(this).find("input[type='checkbox']").removeAttr("checked");
                    });

                    // remove o amigo e seu respectivo HTML (li) do boxes de seleção.
                    $(li).remove();
                    $("#selecionarTodos_" + indicacao).removeAttr("checked");
                }
            });
        });
    });
}

// Define evento do check selecionar todos os amigos
function selecionaTodosAmigos(indicacao) {
    var strHTML = '';

    $("#selecionarTodos_" + indicacao).change(function () {
        if (this.checked) {
            $("#meusAmigos_" + indicacao).checkCheckboxes();
            // copia o codigo html com todos os amigos para o box de amigos selecionados.
            strHTML = $("#meusAmigos_" + indicacao).find("ul").html();
            $("#meusAmigosSelecionados_" + indicacao).find("ul").html(strHTML);
            $("#meusAmigosSelecionados_" + indicacao).checkCheckboxes();

            carregaAmigosSelecionados(indicacao);
        }
        else {
            //descamarca tudo e limpa o boxes de selecionados
            $("#meusAmigos_" + indicacao).unCheckCheckboxes();
            $("#meusAmigosSelecionados_" + indicacao).find("ul").html('');
        }
    });
}

// Reordena e monta o HTML (li) de dentro da div dos boxes de amigos.
function montaHtmlAmigos(arr, divID) {
    var strHTML = '';

    if (divID.indexOf("Selecionados") == -1)
        arr.sort(OrdenarPorNome);

    $.each(arr, function () {
        strHTML +=
            '<li name="' + this.ID + '">' +
                '<input type="checkbox" />' +
                '<div class="item-amigo"><img src="' + this.Thumb + '" /></div>' +
                '<p>' + this.Nome + '</p>' +
            '</li>';
    });

    $("#" + divID).find("ul").html(strHTML);
}

function indica(indicacao, msgTitle) {
    var idDiv;
    var btn;
    var divMais;

    if (indicacao == "app") {
        idDiv = "#indicar_" + indicacao;
        btn = "#btnIndicar";
        divMais = "#indicarMais";
    }
    else {
        idDiv = "#enviar_" + indicacao;
        btn = "#btnEnviar";
        divMais = "#enviarMais";
    }

    $(btn).click(function() {
        var amigosSelecionados = [];

        $("#meusAmigosSelecionados_" + indicacao).find("li").each(function() {
            var id = $(this).attr("name");
            var thumb = $(this).find("img").attr("src");
            var nome = $(this).find("p").text();

            amigosSelecionados.push({ "ID": id, "Nome": nome, "Thumb": thumb });
        });

        if (amigosSelecionados.length > 0) {
            var body = '';
            body += '<style type="text/css">.update{border: 1px solid #efefef; overflow: hidden;  width: 520px;}'+
            ' .update img { float: left;margin-left: 10px; margin-top: 5px;margin-bottom: 5px;}'+
            ' .update .amigos-convidados {margin-left: 10px;margin-top: 10px;margin-bottom: 10px;float: left;width: 170px;}'+
            ' .update .amigos-convidados ul li {font-size: 11px;color: #404040;font-weight: bold;}'+
            ' .update .amigos-convidados p {font-weight: normal;font-size: 11px;}'+
            ' a.btn-adicionar-aplicativo {background-image: url("http://ve-o-extra.googlecode.com/svn/branches/B1/gadget/images/btn-adicionar-canais.gif"); background-repeat: no-repeat;color: #000000;display: block;float: left;font-size: 10px;font-weight: bold;height: 20px;margin-top: 25px; padding-left: 15px;padding-top: 9px;text-decoration: none;text-transform: uppercase;width: 168px;}'+
            '</style>';
            body += '<div style="overflow:hidden; height:600px!important; width:520px;">';
            body += '<img src="http://ve-o-extra.googlecode.com/svn/branches/B1/gadget/images/thumb.jpg" alt="Extra" style="float: left;margin-right:7px!Important;margin-bottom: 5px;" />';
			body += '<div style="margin-left: 10px;margin-top: 6px;margin-bottom: 0px;float: left;width: 170px;">';
            body += '<ul>';

            $.each(amigosSelecionados, function(i) {
                if (i > 2)
                    return true;

                body += '<li style="font-size: 10px;width:140px; height:15px;overflow:hidden;color: #404040;font-weight: bold;">' + amigosSelecionados[i].Nome + '</li>';
            });

            body += '</ul>';
            if (amigosSelecionados.length > 3)
                body += '<p style="font-weight: normal;font-size: 10px;">e mais ' + String(amigosSelecionados.length - 3) + ' amigo(s)</p>';
            
            body += '</div>';
			if (indicacao == "noticia") {
				body += $("#enviar_noticia .noticia-envio").find("div").html();
			}

			body += '<a href="#"><img src="http://ve-o-extra.googlecode.com/svn/branches/B1/gadget/images/btn-adicionar-aplicativo.gif" width="183" style="margin-left:10px;margin-top:23px;" alt="Adicionar Aplicativo" border="0" /></a>';
            body += '</div>';

            postUpdate(msgTitle, body);

            //Sucesso
            $(idDiv).each(function() {
                $("#meusAmigosSelecionados_" + indicacao).find("input[type=checkbox]").each(function() {
                    $(this).attr("disabled", true);
                });

                $(".msg-sucesso").show();
                $("#boxMeusAmigos_" + indicacao).hide();
                $("#boxAmigosSelecionados_" + indicacao).removeClass("amigos-selecionados");
                $(divMais).show();
                $(btn).hide();
            });

            ajustaAltura(idDiv + " SUCESSO");
        }
        else {
            alert("Você deve selecionar pelo menos um amigo.");
        }
    });
}

function indicaMais(indicacao) {
    var idDiv;
    var btn;
    var divMais;

    if (indicacao == "app") {
        idDiv = "#indicar_" + indicacao;
        btn = "#btnIndicar";
        divMais = "#indicarMais";
    }
    else {
        idDiv = "#enviar_" + indicacao;
        btn = "#btnEnviar";
        divMais = "#enviarMais";
    }

    $(idDiv).each(function() {
        $(".btn-indicar-mais").click(function() {
            $("#boxMeusAmigos_" + indicacao).unCheckCheckboxes();
            $("#meusAmigosSelecionados_" + indicacao).find("ul").html('');
            $(".msg-sucesso").hide();
            $("#boxMeusAmigos_" + indicacao).show();
            $("#boxAmigosSelecionados_" + indicacao).addClass("amigos-selecionados");
            $(divMais).hide();
            $(btn).show();
        });
    });

    ajustaAltura(idDiv);
}

function ajustaAltura(page) {
    var pixelsIE7;
    var pixelsIE8;


    switch (page) {
        case "adicionar-alterar_canais":
            pixelsIE7 = '1220px';
            pixelsIE8 = '1230px';
            break;
        case "acompanhar_canais":
            pixelsIE7 = '1140px';
            pixelsIE8 = '1110px';
            break;
        case "indicar_app":
            pixelsIE7 = '900px';
            pixelsIE8 = '890px';
            break;
        case "indicar_app SUCESSO":
            pixelsIE7 = '900px';
            pixelsIE8 = '910px';
            break;
        case "enviar_noticia":
            pixelsIE7 = '1120px';
            pixelsIE8 = '1030px';
            break;
        case "enviar_noticia SUCESSO":
            pixelsIE7 = '1100px';
            pixelsIE8 = '1035px';
            break;
    }

    alturaPorNavegador(pixelsIE7, pixelsIE8);
}

function alturaPorNavegador(pixelsIE7, pixelsIE8) {
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { //test for MSIE x.x;
        var ieversion = new Number(RegExp.$1) // capture x.x portion and store as a number
        
        if (ieversion >= 8)
            gadgets.window.adjustHeight(pixelsIE8);
        else
            gadgets.window.adjustHeight(pixelsIE7);
    }
    else {
        gadgets.window.adjustHeight();
    }
}

function replaceArroba() {
    var strHTML = $(".duvida").html();
    
    strHTML = strHTML.replace(/#arroba#/g, "@");
    $(".duvida").html(strHTML);
}

function exibePage(page) {
    escondePages();

    if (page == "adicionar" || page == "alterar")
        gerenciaCanais(page);
    else
        $("#" + page).show();
    
    ajustaAltura(page);
}

// Busca todos os amigos do dono para seleção de envio de notícia
function gerenciaSelectAmigosNoticia() {
    buscaDados(
        {
            "user": "OWNER",
            "groupId": "FRIENDS",
            "params": { "filter": "all", "sortOrder": "name", "profiledetails": ["PROFILE_URL"] },
            "dados": "",
            "retorno": ""
        }
	    , processaAmigosNoticia
	);
}

function processaAmigosNoticia(resp) {
    var friendsAll = resp.get("people_0").getData();
    var friendsInfo = [];

    friendsAll.each(function(personAll) {
        if (personAll.getId()) {
            friendsInfo.push({ "ID": personAll.getId(), "Nome": personAll.getDisplayName(), "Thumb": personAll.getField(opensocial.Person.Field.THUMBNAIL_URL) });
        }
    });

	montaHtmlAmigos(friendsInfo, "meusAmigos_noticia");
	selecionaTodosAmigos("noticia");
	gerenciaCheckBoxesAmigos("noticia");
	indica('noticia', ' enviou uma notícia para seu(s) amigo(s) ');
	indicaMais("noticia");
}

function boxComentaNoticia() {
    $('a[name=modal]').click(function(e) {
        e.preventDefault();

        var div = $(".conteudo-lightbox .noticia-envio").find("div");
        var li = $(this).parents("li[class^=canal-]").clone();

        $(li).find("ul").remove();
        $(li).find("input[type=hidden]").remove();
        $(div).attr("class", $(li).attr("class"));
        $(div).html($(li).html());

        var id = $(this).attr('href');
        var maskHeight = $(document).height();
        var maskWidth = $(window).width();

        $('#mask').css({ 'width': maskWidth, 'height': maskHeight });
        $('#mask').fadeIn(1000);
        $('#mask').fadeTo('slow', 0.8);

        //Get the window height and width
        var winH = $(window).height();
        var winW = $(window).width();

        $(id).css('top', winH / 2 - $(id).height() / 2);
        $(id).css('left', winW / 2 - $(id).width() / 2);
        $(id).fadeIn(2000);
        window.location = id;
    });

    $('.lightbox-container .closeLink').click(function(e) {
        e.preventDefault();

        $('#mask').hide();
        $('.lightbox-container').hide();
    });
    
    $('.lightbox-container .btnFecharComentario').click(function(e) {
        e.preventDefault();

        $('#mask').hide();
        $('.lightbox-container').hide();
    });

    $('#mask').click(function() {
        $(this).hide();
        $('.lightbox-container').hide();
    });

    $('#txtcomentario').limit('140', '#resta');
}